package org.andy.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * 字符串Util类。<br>
 * 字符串通用处理。<br>
 *
 * @author andy.hu
 * @version V1.0
 * @date 18/2/7 下午12:04
 */
public final class StringUtil {

    private static final String CHARSET_UTF_8 = "UTF-8";

    /**
     * 验证为空（不对入参去空格处理，" " 也表示有字符）
     *
     * @param str
     * @return true 空；false 非空
     */
    public static final boolean isEmpty(String str) {
        if (str == null || "".equals(str)) {
            return true;
        }
        return false;
    }

    /**
     * 验证非空（不对入参去空格处理，" " 也表示有字符）
     *
     * @param str
     * @return true 非空；false 空
     */
    public static final boolean isNotEmpty(String str) {
        if (str != null && str.length() > 0) {
            return true;
        }
        return false;
    }

    /**
     * 验证为空（会对入参去空格处理）
     *
     * @param str
     * @return true 空；false 非空
     */
    public static final boolean isBlank(String str) {
        if (str == null || "".equals(str.trim())) {
            return true;
        }
        return false;
    }

    /**
     * 验证非空（会对入参去空格处理）
     *
     * @param str
     * @return true 非空；false 空
     */
    public static final boolean isNotBlank(String str) {
        if (str != null && str.trim().length() > 0) {
            return true;
        }
        return false;
    }

    /**
     * 将年月日合并为给定分隔符的字符串
     * 例：year=2013，month=1，day=31，toten=/
     * 合并结果 2013/01/31
     *
     * @param year  年
     * @param month 月 1-12
     * @param day   日 1-31
     * @param token 分割符号
     * @return 日期字符串
     */
    public static final String combinateDate2String(int year,
                                                    int month, int day, String token) {
        String m = (month > 9 ? String.valueOf(month) : "0" +
            month);
        return year + token + m + token + day;
    }

    /**
     * null 转  ""
     *
     * @param val
     * @return String
     */
    public static final String null2Empty(Object val) {
        return val == null ? "" : val.toString();
    }

    /**
     * 字符串是否是纯数字
     *
     * @param str 输入字符串
     * @return true 数字； false 非数字
     */
    public static final boolean isNumber(String str) {
        if (isBlank(str)) {
            return false;
        }
        char c;
        int len = str.length();
        for (int i = 0; i < len; i++) {
            c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }

    /**
     * 字符串为非纯数字
     *
     * @param str
     * @return true 非数字； false 数字
     */
    public static boolean isNotNumber(String str) {
        if (isBlank(str)) {
            return false;
        }
        char c;
        int len = str.length();
        for (int i = 0; i < len; i++) {
            c = str.charAt(i);
            if (c < '0' || c > '9') {
                return true;
            }
        }
        return false;
    }

    /**
     * 字符是否是数字
     *
     * @param c 输入字符
     * @return true 数字； false 非数字
     */
    public static boolean isNumber(char c) {
        if (c < '0' || c > '9') {
            return false;
        }
        return true;
    }

    /**
     * 将首字符转换为大写
     *
     * @param str   输入字符
     * @return  String
     */
    public static final String initcap(String str) {
        if (isBlank(str)) {
            return null;
        }
        return str.substring(0, 1).toUpperCase()
            + str.substring(1);
    }



    /**
     * 判断字符数组中是否包含某个字符
     *
     * @param arr         字符数组
     * @param targetValue 字符
     * @return boolean
     */
    public static boolean isContains(String[] arr, String targetValue) {
        for (String s : arr) {
            if (s.equals(targetValue)) {
                return true;
            }
        }
        return false;
    }

}
	
